#!/usr/bin/perl -w use strict; ############################################# # Authors: Marta Massanella, Ingrid Pallās # # Charles Chapple & Josep Abril # # Date: March 2005 # ############################################# my %positions; my ($name, $seq); open (SEQ , "$ARGV[0]") || die("no file : $!\n"); while() { next if />/; $seq = $_; chomp $seq; } close(SEQ); open(SNP, "$ARGV[1]") || die("no file : $!\n"); while() { next unless /Sequence/; $_ =~ />(.*?)\s.*?:\s+(.*)$/ || die("no match $_\n"); $name = $1; my @snps = split(/\s+/, $2); my @ch; foreach my $snp (@snps) { $snp =~ /(\d+)(.*)/; my @c = split (//, $2); @c = ($1, @c); push @ch, [@c]; } $positions{$name} = [@ch]; } close(SNP); my @keys = keys(%positions); foreach my $sequence_name (@keys) { print "=============$sequence_name============\n"; my @array = @{$positions{$sequence_name}}; my @seqs = &makeseqs($seq, @array); my $slen = length $seq; $slen = "." x $slen; map { substr($slen,$_->[0],1) = '|' } @array; print "$slen\n"; my $i = 0; map {print ">$i\n$_\n"; $i++} @seqs; } sub makeseqs { my ($seq, $array, @P) = @_; return $seq unless defined $array; my ($pos, @changes) = @$array; my @out = (); foreach my $nuc (@changes) { my $temp = ($seq, $pos); if ($nuc eq '-') { substr($seq, $pos, 1) = ''; } else { substr($seq, $pos, 1) = $nuc; } # print $seq, "\n"; push @out, makeseqs($seq, @P); } return @out; }